package jheej5024;

import java.util.List;
import java.util.ArrayList;

public class J04_Collection {

	//콜렉션 collection
	//객체지향 기반 프로그램 작성시
	//종종 같은 종류의 객체의 묶음group이나
	//다른 종류의 객체묶음을 함께 쓰는때가 있음
	
	//앞서 배운 배열은 같은 종류의 객체 묶음이지만
	//유연성이 부족하고 , 크기 조정도 안되고
	//다른종류의 객체도 가질 수 없음
	
	//다행히 자바에는 이러한 종류의 객체를 쉽게
	//다를 수 있는 인터페이스와 클래스를 제공
	//그것은 바로 Collection 프레임워크임
	
	//collection은 다른 종류로 구성된 객체들의 묶음을 의미
	//또 다른 말로 용이container 라고도 하는데,
	//각 요소를 저장,검색, 조작하는 메서드를 제공
	
	//Collection <-Set, List, Queue
	//List<-ArrayList, Vector
	//Map <-AbstractMap, SortedMap
	//AbstractMap <- HashMap
	//Iterator, Comparator
	
	//이들 대부분은 java.util 패키지에 포함됨
	
	//List - 동적배열
	//Collection의 가장 인기있는 하위 인터페이스임
	//ArrayList는 List의 가장 자주사용하는 구현클래스
	//List는 자료를 순서대로 저장하는 특성을 가짐
	//FIFO : First in First out 선입선출
	//또한, 데이터를 중복으로 저장가능
	//단, Set은 중복 허용불가!
	//add메서드를 통해 데이터를List의 맨끝에 추가
	
	//지네릭generic
	//collection 을 배울때 generic을 빼놓으면
	//불완전하게 collection을 배우는 것임
	//collection을 사용할때 발생할수 있는
	//컴파일 시간때 엄격한 자료형을 검사를 지원
	//또한, 대부분의 colletion을 다룰때 대부분의
    //downcasting을 제거하고 사용할 수 있음
	//또한, C++에서 제공하는 클래스 템플릿을
	//작성할 수 있게 해 줌(고급)
	
	//지네릭에서는매개변수 자료형parameterized type을 이용해서
	//collection 요소의 자료형을 지정함
	//메서드의 매개변수는 ()안에 사용하는 것처럼 collection 에서는 
	//<>안에 매개변수자료형을 사용
	//List<String> result = null;
	
	
	
	
	public static void main(String[] args) {
		List a = new ArrayList();
		a.add(1111);
		a.add('수');
		a.add(123.456);
		a.add("김태희");
		a.add(new J03_MemberVO());
         System.out.println(a);
         
         //ArrayList에 저장된 객체를 하나씩 꺼내 출력
         System.out.println(a.get(0));
         System.out.println(a.get(1));
         System.out.println(a.get(2));
         System.out.println(a.get(3));
         System.out.println(a.get(4));
         
         
         //ArrayList에 저장된 객체를 하나씩 꺼내 변수에 따로 저장
         //이유:ArrayList에 객체를 저장할때는
         //대상이 무엇이든 간에 무조건 Object형으로 저장됨
         //따라서, ArrayList에 저장된 객체를 꺼낼때는 객체의 자료형에 맞춰
         //downcasting이 필요(JDK 5이전)
         
         
         int num = (int)a.get(0);
         char chr =(char) a.get(1);
         float floatunm = (float)a.get(2);
         String str = (String)a.get(3);
         
         //하지만, 이렇게 해도 일단 컴파일 오류는 X
         //실행하면 비로소 오류가  뜸
         //이런 종류의 오류는 찾기 힘듦
         char num2 = (char)a.get(0);   //int
         Integer intg = (Integer)a.get(3);   //String      
	
         //지네릭을 사용했을 경우
         List<String> abc= new ArrayList<String>();
         //List<String> abc= new ArrayList<>();  //JDK1.7
         //abc라는 콜렛션(동적배열)에는
         //String 형식의 값만 추가할 수 있다는 의미
         
         //abc.add(123);  //자료형 검사후 오류표시
         //abc.add('a');
         abc.add("김태희");  //정상처리
         
         String xyz = abc.get(0);  //형변환은 필요x
         
          List<J03_MemberVO>results = new ArrayList<J03_MemberVO>();
         
	}

}




















